package ooday04;
// static 的演示
public class StaticDemo {
    public static void main(String[] args) {
        Foo o1 = new Foo();
        o1.show();
        Foo o2 = new Foo();
        o2.show();
        Foo o3 = new Foo();
        o3.show();

        int num = Hoo.plus(5,6);
        System.out.println(num);

        Ioo o4 = new Ioo();
        Ioo o5 = new Ioo();
        Ioo o6 = new Ioo();
    }
}
// 演示静态变量
class Foo{
    int a;
    static int b;
    Foo(){
        a++;
        b++;
    }
    void show(){
        System.out.println("a="+a+" b="+b);
    }
}
// 演示静态方法
class Goo{
    int a; // 实例变量 通过对象来访问
    static int b; // 静态变量 通过类名来访问

    void show(){ // 有隐式 this
        System.out.println(this.a);
        System.out.println(Goo.b);
    }
    static void test(){ // 无隐式 this
        // 静态方法中 没有隐式 this 传递
        // 没有 this 就意味着没有对象
        // 而实例变量a 必须要通过对象点来访问
        // 所以如下语句发生编译错误
        // System.out.println(a); // 编译错误
        System.out.println(Goo.b);
    }
}
// 演示静态方法何时用
class Hoo{
    int a; // 描述的是对象属性
    void show(){ // 和对象有关 所以不适用静态方法
        System.out.println(a);
    }
    static int plus(int num1,int num2){
        // 和对象无关 可以使用静态方法
        int num = num1 + num2;
        return num;
    }
}
// 演示静态块
class Ioo{
    static {
        System.out.println("静态块");
    }
    Ioo(){
        System.out.println("构造方法");
    }
}